// 返回的日期格式 如: 2021/7/8 15:18:13s
const formatTime = (date) => {
  const year = date.getFullYear() // getFullYear() 方法可返回一个表示年份的 4 位数字。
  const month = date.getMonth() + 1 // getMonth() 方法可返回表示月份的数字
  const day = date.getDate() // getDate() 方法可返回月份的某一天。
  const hour = date.getHours() // getHours() 方法可返回时间的小时字段
  const minute = date.getMinutes() // getMinutes() 方法可返回时间的分钟字段。
  const second = date.getSeconds() // getSeconds() 方法可返回时间的秒
  return `${[year, month, day].map(formatNumber).join('/')} ${[ // map() 方法返回一个新数组，数组中的元素为原始数组元素调用函数处理后的值
  //join() 方法用于把数组中的所有元素放入一个字符串。 元素是通过指定的分隔符进行分隔的。
    hour,
    minute,
    second,
  ]
    .map(formatNumber)
    .join(':')}`
}

// 2020-01-07形式
const formatDate = (date) => {
  const year = date.getFullYear()
  const month = date.getMonth() + 1
  const day = date.getDate()
  return `${[year, month, day].map(formatNumber).join('-')}`
}
// 2021:7:8
const formatYMD = (date) => {
  const year = date.getFullYear()
  const month = date.getMonth() + 1
  const day = date.getDate()
  return { y: year, m: month, d: day }
}
// 给个位数前面加0
const formatNumber = (n) => {
  n = n.toString()// toString() 方法可把一个 Number 对象转换为一个字符串，并返回结果。
  return n[1] ? n : `0${n}`
}
// 年月日形式
const formatDateCh = (date = new Date()) => {
  const year = date.getFullYear()
  const month = date.getMonth() + 1
  const day = date.getDate().toString().padStart(2, '0')
  const realMonth = month.toString().padStart(2, '0')
  return `${year}年${realMonth}月${day}日`
}

// 剩余时间(到达时间-出发时间)
// 传入开始时间和结束时间，返回结余时间
const computingTime = (start, end) => {
  let sHour = start.split(':', 1)[0]
  let sMin = Number(start.split(':', 2)[1]) + sHour * 60
  let eHour = end.split(':', 1)[0]
  if (eHour == '00') {
    eHour = '24'
  }
  let eMin = Number(end.split(':', 2)[1]) + eHour * 60
  let balance = eMin - sMin
  if (balance < 60) {
    return `0时${balance}分`
  } else {
    let h = (balance / 60).toString().split('.', 1)[0].padStart(2, '0')
    let m = balance % 60
    return `${h}时${m}分`
  }
}

module.exports = {
  formatTime,
  formatDate,
  formatYMD,
  formatDateCh,
  computingTime,
}
